package main

import "fmt"

/*
interface{}空接口类似于java中的Object
例如 map[string]interface{} 就是key是string类型，value是任意类型

对于interface{}类型的x，可以使用 x.(<type>)判断x是哪一个类型

x.(T):  该语法返回两个参数，
	第一个参数是x转化为T类型后的变量，第二个值是一个布尔值，若为true则表示断言成功，为false则表示断言失败。
*/
func main() {
	var x interface{} //声明一个任意类型的x
	x = "pprof.cn"
	//判断
	v, ok := x.(string)
	if ok {
		fmt.Println(v)
	} else {
		fmt.Println("类型断言失败")
	}

	justifyType(x) //x is a string，value is pprof.cn
}

func justifyType(x interface{}) {
	switch v := x.(type) {
	case string:
		fmt.Printf("x is a string，value is %v\n", v)
	case int:
		fmt.Printf("x is a int is %v\n", v)
	case bool:
		fmt.Printf("x is a bool is %v\n", v)
	default:
		fmt.Println("unsupport type！")
	}
}
